#include <iostream>
#include <atomic>
#include <mutex>
#include <thread>
#include <pthread.h>
#include <unistd.h>
#include <condition_variable>
using namespace std;
static int n = 0;
void func(int n, int times)
{
	for (int i = 0; i < times; i++)
	{
		n++;
        cout << this_thread::get_id() << " n:" << n << endl;
	}
}
int main()
{
	// atomic<int> n = { 1 };
    //int n = 1;
	int times = 100; //每个线程对n++的次数
    //sleep(1);
	thread t1(func, ref(n), times);
	thread t2(func, ref(n), times);

	t1.join();
	t2.join();
	cout << n << endl; //打印n的值
	return 0;
}

// int main()
// {
// 	int n = 100;
// 	mutex mtx;
// 	condition_variable cv;
// 	bool flag = true;
// 	//奇数
// 	thread t1([&]{
// 		int i = 1;
// 		while (i <= 100)
// 		{
// 			unique_lock<mutex> ul(mtx);
// 			cv.wait(ul, [&flag]()->bool{return flag; }); //等待条件变量满足
// 			cout << this_thread::get_id() << ":" << i << endl;
// 			i += 2;
// 			flag = false;
// 			cv.notify_one(); //唤醒条件变量下等待的一个线程
// 		}
// 	});
// 	//偶数
// 	thread t2([&](){
// 		int j = 2;
// 		while (j <= 100)
// 		{
// 			unique_lock<mutex> ul(mtx);
// 			cv.wait(ul, [&flag]()->bool{return !flag; }); //等待条件变量满足
// 			cout << this_thread::get_id() << ":" << j << endl;
// 			j += 2;
// 			flag = true;
// 			cv.notify_one(); //唤醒条件变量下等待的一个线程
// 		}
// 	});

// 	t1.join();
// 	t2.join();
// 	return 0;
// }
